#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>


using namespace std;
/*
题目描述：

*/
int m, n;
int nbit(int num)
{
    int ans = 0;
    while(num)
    {
        num=(num-1) & num; //不停的减一然后做与运算, 看它多少次后变为0
        ans++;
    }
    return ans;
}

bool check(int now, int floor)
{
    int num_a=0, num_b=0;  //用于统计a和b的个数

    for(int i=floor;i>=1;i--) //i是层数也是机器人的个数
    {
        int count1 = nbit(now); //now里面有多少个1
        num_b += count1;
        num_a += i-count1; //now里面有多少个0
        //求上一层的now
        now ^= now>>1;
        now &= (1<<(i-1))-1; //去掉最高位
        if(num_a>m || num_b>n) return false;
    }
    return num_b==n && num_a==m;
}

int main()
{
    cin >> m >> n;
    int floor = sqrt((n+m)*2); //推出层数 底行的人数

    int ans = 0;
    //2的floor次方排列方案，每一种方案表示为i 底层就是全0到全1的过程 每一个位置都有两种情况0或者1
    for(int i=0;i<(1<<floor); i++)
    {
        if(check(i,floor)) ans++;  //i可以说是一个二进制数
    }
    cout << ans << endl;
    return 0;
}